iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
Software Development

成為童年的英雄,Minecraft Java 模組製作系列 第 20

Minecraft Mod 模組製作 [DAY20] 右鍵偵測 神奇桿桿(完) +測試影片

  • 分享至 

  • xImage
  •  

神奇桿桿程式碼

package com.example.examplemod;

import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.Arrow;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import org.w3c.dom.events.Event;

public class RightClick {
    @SubscribeEvent
    public static void RightClick(PlayerInteractEvent.RightClickItem event) {
        if (!event.getLevel().isClientSide) {
            Player player = event.getEntity();
            Component rightClickMessage = Component.literal("RightClick");
            player.sendSystemMessage(rightClickMessage);
            Component leverMessage = Component.literal("This is a Lever");
            ItemStack HeldItem = player.getItemInHand(InteractionHand.MAIN_HAND);
            if (!HeldItem.isEmpty() && HeldItem.getItem() == Items.LEVER) {
                    player.sendSystemMessage(leverMessage);
                double x = player.getX();
                double y = player.getY()+player.getEyeHeight();
                double z = player.getZ();
 
                for (int i = -1; i <= 1; i++) {
                    for (int j = -1; j <= 1; j++) {
                        Arrow arrow = new Arrow(player.level, x, y, z);
                        arrow.shootFromRotation(player, player.getXRot()+i*5,player.getYRot()+j*5, 1F,5F, 1F);
                        player.level.addFreshEntity(arrow);
                    }
                }
            }
        }
     }
}

些微修改後的完整程式碼

截圖

https://ithelp.ithome.com.tw/upload/images/20231005/20161797zJyzAFcmLr.pnghttps://ithelp.ithome.com.tw/upload/images/20231005/20161797sC8oleadcY.png

影片連結

Yes

討論

Minecraft的事件偵測功能是很強大的,目前一個右鍵偵測就可以做到許多不同的功能,如果我將右鍵功能的目標從控制桿移至我自己的模組物品,再將這個射出的彈藥改成自製的投射物,可以做成一把槍枝之類的。

未來計畫

接下來的十天我們應該要做出

  1. 一個銀磚方塊
  2. 一個合成表 將銀錠合成成銀磚
  3. 一個銀礦方塊+銀礦物品
  4. 一個銀礦的掉落物程式
  5. 一個銀礦的熔爐熔煉的合成表
  6. 一個銀礦的生成機制,將銀礦生成的位置與數量做出來
  7. 可以做一些銀礦專屬物品,一套工具+盔甲之類的

方塊註冊部分程式碼

public static final DeferredRegister<Block> BLOCKS =
            DeferredRegister.create(ForgeRegistries.BLOCKS, Mymod.MOD_ID);
 
    public static final RegistryObject<Block> SILVER_BLOCK = registerBlock("silver_block",
            ()-> new Block(BlockBehaviour.Properties.of(Material.METAL).
                    strength(6f).requiresCorrectToolForDrops()));

這部分的程式碼與物品註冊的部分有意點不同,首先在

()-> new Block(BlockBehaviour.properties.of(Material.METAL))

這個部分是設定方塊的種類,這會影響方塊的指定破壞工具(如果有設定要指定工具的話),還有破壞的音效等等。

剩下的明天說


上一篇
Minecraft Mod 模組製作 [DAY19] 右鍵偵測 神奇桿桿(三)
下一篇
Minecraft Mod 模組製作 [DAY21] 方塊註冊
系列文
成為童年的英雄,Minecraft Java 模組製作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言